const mongoose = require('mongoose')
const Schema = mongoose.Schema

// 连接数据库
mongoose.connect('mongodb://127.0.0.1/zyqa')

// 获取数据库连接
const conn = mongoose.connection
// 监听数据库连接事件
conn.on('connected', () => console.log('数据库连接成功...'))

// 创建数据模型
// 数据模型是表示一个事物的对象（类）
// 在计算机中通常会使用模型来代表一类事物
// 模型中包含与该类事物相关的数据和功能
// 数据会变成模型中的属性
// 功能会变成模型中的方法（函数）
// 第1个参数表示模型的数据所在的集合
// 第2个参数表示模型的数据都有哪些属性，及这些属
// 性的数据类型

const userSchema = Schema({
    account: String,
    password: String,
    photo: String,
    createTime: Date,
    ip: String,
})

const keywordSchema = Schema({
    text: String,
    createUser: {
        type: Schema.Types.ObjectId,
        ref: 'users'
    },
    createTime: Date,
    ip: String
})

const questionSchema = Schema({
    text: String,
    keyword: String,
    createUser: {
        type: Schema.Types.ObjectId,
        ref: 'users'
    },
    createTime: Date,
    ip: String
})

exports.User = mongoose.model('users', userSchema)
exports.Keyword = mongoose.model('keywords', keywordSchema)
exports.Question = mongoose.model('questions', questionSchema)

exports.toData = function(m) {
    m = m.toObject()
    m.id = m._id.toString()
    delete m._id

    return m
}

// 数据库返回的models中的model不是纯
// 数据，通过map方法将每一个model都转换
// 成纯数据，并且处理内部的_id，将之转换成
// 字符串
exports.toDatas = function(models){
    return models.map(m => exports.toData(m))
}